import greenfoot.*;  // (World, Actor, GreenfootImage, Greenfoot and MouseInfo)

/**
 *
 * Este es un insecto hijo que es creado cuando dos insectos se intersectan, es más fuerte requiere de 2 disparos para su eliminación.
 * @author (Alejandro Caldera) 
 * 
 */
public class InsHijo extends Plaga
{
    /**
     * Act - do whatever the InsHijo wants to do. This method is called whenever
     * the 'Act' or 'Run' button gets pressed in the environment.
     */
    
   private int angulo;
   int shotstaken=0;
   public InsHijo(int a)
   {
      angulo=a; 
   }
   
   /**
     * Determina el ángulo con que  gira el insecto.
     */
   public InsHijo()
   {
     angulo=9; 
   }
   public void act() 
    {
        move(8);
        giraAleatorio();
        rebota();
        if(encontroEtiqueta())
        turn(-58);
        if(encontroPelota())
        turn(14);
        if(encontroBart())
        turn(23);
        //Detecta cuando recibe una bala.
            Actor bullet=getOneIntersectingObject(Bullet.class);
        if(bullet!=null)
      {
          
          // Borra la bala e incrementa disparos recibidos, si ha recibido el segundo balazo desaparece.
          getWorld().removeObject(bullet);
          shotstaken++;
          if (shotstaken==2)
          getWorld().removeObject(this);
          
        }
        
       
        
      
    }  
    
     /**
       Función booleana que detecta si se ha encontrado una etiqueta,de ser así regresa un true de lo contrario un false.
     */
    
    
    public boolean encontroEtiqueta()
    {
        Actor etiqueta=null;
        
        etiqueta=getOneIntersectingObject(Label.class);
         if (etiqueta!= null)
            return true;
        else
            return false;
    } 
    
     /**
       Función que indica si se ha llegado al límite del escenario,de ser así el actor gira mediante turn.
     */
    
    public void rebota()
    {
        int x=super.getX();
        int y=super.getY();
        
         
         //1.acceder al mundo con getWorld()
         World mundo=super.getWorld();
         //2. acceder al ancho del mundo con getWidth();
         int ancho=mundo.getWidth();
         //3.acceder al alto con getHeight();
         int alto=mundo.getHeight();
        
         if(x==ancho-1||x==0||y==alto-1||y==0)
         turn(1);
    
    }
    
     /**
       Función que hacer girar al actor con la obtención de un número aleatorio.
     */
    
    public void giraAleatorio()
    {
      int aleatorio= Greenfoot.getRandomNumber(angulo*2+8)-angulo;
      super.turn(aleatorio);
    }


     /**
       Función booleana que detecta si se ha encontrado una pelota,de ser así regresa un true de lo contrario un false.
     */
 public boolean encontroPelota()
    {
        Actor pelota=null;
        
        pelota=getOneIntersectingObject(Pelota.class);
         if (pelota!= null)
            return true;
        else
            return false;
    }
     
     /**
       Función booleana que detecta si se ha encontrado a bart,de ser así regresa un true de lo contrario un false.
     */
     public boolean encontroBart()
    {
        Actor bart=null;
        
        bart=getOneIntersectingObject(Bart.class);
         if (bart!= null)
            return true;
        else
            return false;
    }
}